package alibaba.ifelserefactor.demo01.test02;

import alibaba.ifelserefactor.demo01.ShareListener;
import lombok.extern.slf4j.Slf4j;

/**
 * @author ChangLiang
 * @date 2020/4/20
 */
@Slf4j
public class ShareService {

    public void share (ShareItem item, ShareListener listener) {
        if (item == null) {
            if (listener != null) {
                listener.onCallback(ShareListener.STATE_FAIL, "ShareItem 不能为 null");
            }
            return;
        }
        if (listener == null) {
            listener = new ShareListener() {
                @Override
                public void onCallback(int state, String msg) {
                    log.info("DEBUG", "ShareListener is null");
                }
            };
        }
        shareImpl(item, listener);
    }

    private void shareImpl(ShareItem item, ShareListener listener) {
        /**
         * 内部接口一个if else都没了
         * 如果这个分享功能是自己App里面的功能，不是第三方SDK，到这里已经没问题了。
         * 但如果是第三方分享SDK的功能的话，这样暴露给用户的类增加了很多（各ShareItem的子类，相当于把if else抛给用户了）
         * 比如说前端需要调用这个SDK，那么前端传入什么呢 前端需要了解这几种分享类型，根据不同的分享类型来组装不同的类的格式
         * 用户的接入成本提高，违背了“迪米特原则”了
         */
        item.doShare(listener);
    }
}
